package br.com.imob.dao;

import br.com.imob.modelo.Empresa;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 11:18:40 02/02/2011 2011
 *  @version 
 */

public class EmpresaDao extends GenericDao {
	
	public EmpresaDao() {  }
	
	public Integer adicionarEmpresa(Empresa empresa) {
		saveOrUpdatePojo(empresa);
		return empresa.getEmpresaId();
	}
	
	public void removerEmpresa(Empresa empresa) {
		removerPojo(empresa);
	}

	/* Precisa definir o ID */
	public void atualizarEmpresa(Empresa recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarEmpresa(Empresa recuperar, Empresa alterar) {
		recuperar = retriveEmpresa(recuperar);
		
		if(alterar.getFantasia() != null)
			recuperar.setFantasia(alterar.getFantasia());
		if(alterar.getRazaoSocial() != null)
			recuperar.setRazaoSocial(alterar.getRazaoSocial());
		if(alterar.getInscricaoEstado() != null)
			recuperar.setInscricaoEstado(alterar.getInscricaoEstado());
		if(alterar.getCnpj() != null)
			recuperar.setCnpj(alterar.getCnpj());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Empresa
	protected Empresa retriveEmpresa(Empresa recuperar) {
		if(recuperar.getEmpresaId() != null)
			return getEmpresa(recuperar.getEmpresaId());
		if(recuperar.getFantasia() != null)
			return getEmpresaQNamedFantasia(recuperar.getFantasia());
		if(recuperar.getRazaoSocial() != null)
			return getEmpresaQNamedRazaoSocial(recuperar.getRazaoSocial());
		if(recuperar.getInscricaoEstado() != null)
			return getEmpresaQNamedInscricaoEstado(recuperar.getInscricaoEstado());
		if(recuperar.getCnpj() != null)
			return getEmpresaQNamedCnpj(recuperar.getCnpj());
		
		return recuperar;
	}
	
	
//	Consultas
	public Empresa getEmpresa(Integer key) {
		return getPojoByID(Empresa.class, key);
	}
	public Empresa getEmpresaByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Empresa getEmpresaQNamedFantasia(String fltrFantasia) {
		return getPojoByQNamed("Empresa.findByFantasia", fltrFantasia);
	}
	public Empresa getEmpresaQNamedRazaoSocial(String fltrRSocial) {
		return getPojoByQNamed("Empresa.findByRazaoSocial", fltrRSocial);
	}
	public Empresa getEmpresaQNamedInscricaoEstado(String fltrComer) {
		return getPojoByQNamed("Empresa.findByInscricaoEstado", fltrComer);
	}
	public Empresa getEmpresaQNamedCnpj(String fltrCnpj) {
		return getPojoByQNamed("Empresa.findByCnpj", fltrCnpj);
	}
	
	public List<Empresa> getEmpresas() {
		return (List<Empresa>) getALL(Empresa.class);
	}
	public List<Empresa> getEmpresasQNamedFantasiaPRX(String fltrFantasia) {
		return getListByQNamedPRX("Empresa.findLikeByFantasia", fltrFantasia);
	}
	public List<Empresa> getEmpresasQNamedRazaoSocialPRX(String fltrRSocial) {
		return getListByQNamedPRX("Empresa.findLikeByRazaoSocial", fltrRSocial);
	}
	public List<Empresa> getEmpresasQNamedInscricaoEstadoPRX(String fltrInscricaoEstado) {
		return getListByQNamedPRX("Empresa.findLikeByInscricaoEstado", fltrInscricaoEstado);
	}
	public List<Empresa> getEmpresasQNamedCnpjPRX(String fltrCnpj) {
		return getListByQNamedPRX("Empresa.findLikeByCnpj", fltrCnpj);
	}
	public List<Empresa> getEmpresasByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}